// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 初始化数据库
const db = cloud.database();

// 查询按照品牌分类整合的胶皮
const searchProduct = async (keyword) => {
  if(keyword.length < 2) {
    return {
      success: false,
      msg: "关键词中文数至少2，英文数至少4"
    }
  }

  try {
    // 构建正则表达式进行模糊查询
    const regex = new RegExp(keyword, 'i'); // 'i' 表示不区分大小写

    // 查询胶皮的
    let rubberPromise = db.collection("rubber")
      .aggregate()
      .match({
        name: regex // 在name字段中进行模糊匹配
      })
      .lookup({
          from: 'brand', // 需要关联的表的名称，例如存储品牌信息的表叫 'brand'
          localField: 'brand', // rubber 表中的关联字段，存储的是品牌ID
          foreignField: '_id', // brand 表中被关联的字段，通常是 _id
          as: 'brandInfo' // 将关联查询到的品牌详细信息放入这个新字段中
      })
      .unwind('$brandInfo') // 将brandInfo数组展开为对象
      .project({
        _id: true,
        name: true,
        // type: 'rubber', // 添加类型标识
        brandName: '$brandInfo.name', // 将品牌名称映射到新的字段
        coverPath: true,
        position: true, 
        price: true,
        perf: true
      }).end();

    // 查询底板的
    let bladePromise = db.collection("blade")
      .aggregate()
      .match({
        name: regex // 在name字段中进行模糊匹配
      })
      .lookup({
          from: 'brand', // 需要关联的表的名称，例如存储品牌信息的表叫 'brand'
          localField: 'brand', // Blade 表中的关联字段，存储的是品牌ID
          foreignField: '_id', // brand 表中被关联的字段，通常是 _id
          as: 'brandInfo' // 将关联查询到的品牌详细信息放入这个新字段中
      })
      .unwind('$brandInfo') // 将brandInfo数组展开为对象
      .project({
        _id: true,
        name: true,
        // type: 'blade', // 添加类型标识
        brandName: '$brandInfo.name', // 将品牌名称映射到新的字段
        coverPath: true,
        price: true,
        craft: true,
        descript: true
      }).end();
    
    // 并行执行两个查询
    const [rubberResult, bladeResult] = await Promise.all([rubberPromise, bladePromise]);

    // 返回整合结果
    return {
      success: true,
      data: {
        rubberResults: rubberResult.list || [],
        bladeResults: bladeResult.list || []
      },
      count: (rubberResult.list?.length || 0) + (bladeResult.list?.length || 0)
    };

  } catch (error) {
    console.error('搜索出错:', error);
    return {
      success: false,
      msg: '搜索失败，请稍后重试'
    };
  }    
};

// 云函数入口函数
exports.main = async (event, context) => {
  switch (event.type) {
    case "searchProduct":
      return await searchProduct(event.keyword);
  }
}
